package com.sisgesbyte.services.sistema;

import java.util.ArrayList;
import java.util.List;

import javax.ejb.EJB;
import javax.ejb.Stateless;
import javax.inject.Inject;

import com.sisgesbyte.common.ConstantesInternasSistema;
import com.sisgesbyte.common.Validaciones;
import com.sisgesbyte.dao.beanDao.FiltrosSQLBean;
import com.sisgesbyte.dao.beanDao.ModuloEditRequest;
import com.sisgesbyte.dao.beanDao.ModuloNuevoRequest;
import com.sisgesbyte.dao.tecnico.MantenimientoModuloDao;
import com.sisgesbyte.data.entity.comun.GenericEntity;
import com.sisgesbyte.data.entity.tecnico.ListaModulosEntity;
import com.sisgesbyte.data.entity.tecnico.ListaTipoModulosEntity;
import com.sisgesbyte.services.commonBean.GenericResponse;
import com.sisgesbyte.services.sistema.bean.ListaTipoModulosResponse;
import com.sisgesbyte.services.sistema.bean.ModuloBean;
import com.sisgesbyte.services.sistema.bean.ModuloMantenimientoBean;
import com.sisgesbyte.services.sistema.bean.ModuloMantenimientoResponse;
import com.sisgesbyte.services.sistema.bean.TipoModuloBean;

@Stateless
public class MantenimientoModuloImpl implements MantenimientoModulo {

	@EJB
	private MantenimientoModuloDao mantenimientoModuloDao;
	
	@Inject
	private Validaciones validaciones;
	
	
	@Override
	public ModuloMantenimientoResponse mostrarModulos(String codTransaccion,FiltrosSQLBean cadenaFiltros) {
		
		List<ListaModulosEntity> listaModulos = null;
		ModuloMantenimientoResponse response = new ModuloMantenimientoResponse();
		response.setIdTransaccion(codTransaccion);
		try{
			
			try{
				listaModulos = mantenimientoModuloDao.listarModulos(cadenaFiltros);
				List<ModuloMantenimientoBean> listaMod = new  ArrayList<ModuloMantenimientoBean>();
				if(listaModulos.size() > 0){
					
					for (ListaModulosEntity row : listaModulos) {
						ModuloMantenimientoBean bean = new ModuloMantenimientoBean();
						bean.setActive(row.isActive());
						bean.setCodModulo(row.getId());
						bean.setDescripcion(validaciones.validarCamposString(row.getDescripcion()));
						bean.setIcon(validaciones.validarCamposString(row.getIcon()));
						bean.setNombreModulo(validaciones.validarCamposString(row.getNombre()));
						bean.setOrden(row.getOrden());
						bean.setSummary(validaciones.validarCamposString(row.getSummary()));
						bean.setTipo(row.getTipo());
						bean.setTipoModulo(validaciones.validarCamposString(row.getTipomodulo()));
						bean.setUrl(validaciones.validarCamposString(row.getUrl()));
						bean.setVersion(validaciones.validarCamposString(row.getVersion()));
						listaMod.add(bean);
					}
					response.setListaModulosMantenimiento(listaMod);
					response.setCodigoRespuesta(ConstantesInternasSistema.CODIGO_EXITO);
					response.setMensajeRespuesta(ConstantesInternasSistema.MENSAJE_EXITO);
				}else{
					response.setListaModulosMantenimiento(listaMod);
					response.setCodigoRespuesta(ConstantesInternasSistema.LISTAR_MODULOS_COD_IDF9);
					response.setMensajeRespuesta(ConstantesInternasSistema.LISTAR_MODULOS_MSJ_IDF9);
				}

			}catch(Exception e){
				response.setCodigoRespuesta(ConstantesInternasSistema.LISTAR_MODULOS_COD_IDT9);
				response.setMensajeRespuesta(ConstantesInternasSistema.LISTAR_MODULOS_MSJ_IDT9);
				return response;
			}
			
		}catch(Exception e){
			response.setCodigoRespuesta(ConstantesInternasSistema.LISTAR_MODULOS_COD_IDT10);
			response.setMensajeRespuesta(ConstantesInternasSistema.LISTAR_MODULOS_MSJ_IDT10);
			return response;
		}
		
		return response;
	}

	@Override
	public GenericResponse nuevoModulo(String codTransaccion, ModuloBean modulo) {
		
		GenericEntity nuevoModuloDao = null;
		GenericResponse response = new GenericResponse();
		try{
			
			ModuloNuevoRequest requestModuloDao = new ModuloNuevoRequest();
			requestModuloDao.setActive(modulo.getActivo());	
			requestModuloDao.setDescripcion(modulo.getDescripcion());
			requestModuloDao.setIcon(modulo.getImagen());
			requestModuloDao.setNombreModulo(modulo.getNombre());
			requestModuloDao.setOrden(modulo.getOrden());
			requestModuloDao.setSummary(modulo.getSummary());
			requestModuloDao.setTipo(modulo.getTipo());
			requestModuloDao.setUrl(modulo.getUrl());
			requestModuloDao.setVersion(modulo.getVersion());
			
			try{
				nuevoModuloDao = mantenimientoModuloDao.moduloNuevo(requestModuloDao);
			}catch(Exception e){
				System.out.println("Error al llamar al DAO: mantenimientoModuloDao");
				response.setCodigoRespuesta(ConstantesInternasSistema.REGISTRAR_MODULOS_COD_IDT11);
				response.setMensajeRespuesta(ConstantesInternasSistema.REGISTRAR_MODULOS_MSJ_IDT11);
				return response;
			}
			
			if(nuevoModuloDao.getCod_error() == Integer.valueOf(ConstantesInternasSistema.CODIGO_EXITO)){
				response.setIdTransaccion(codTransaccion);
				response.setCodigoRespuesta(String.valueOf(nuevoModuloDao.getCod_error()));
				response.setMensajeRespuesta(nuevoModuloDao.getMsj_error());
			}else{
				response.setCodigoRespuesta(ConstantesInternasSistema.REGISTRAR_MODULOS_COD_IDF10);
				response.setMensajeRespuesta(ConstantesInternasSistema.REGISTRAR_MODULOS_MSJ_IDF10);
			}
			
		}catch(Exception e){
			System.out.println("Ocurrio un error en el Proceso del metodo nuevoModulo ");
			response.setCodigoRespuesta(ConstantesInternasSistema.REGISTRAR_MODULOS_COD_IDT11);
			response.setMensajeRespuesta(ConstantesInternasSistema.REGISTRAR_MODULOS_MSJ_IDT11);
			return response;
		}

		return response;
	}

	@Override
	public GenericResponse editModulo(String codTransaccion, ModuloBean modulo) {

		GenericEntity editEntity = null;
		GenericResponse response = new GenericResponse();
		try{

			ModuloEditRequest moduloEdit = new ModuloEditRequest();
			moduloEdit.setCodModulo(modulo.getCodigo());
			moduloEdit.setActive(modulo.getActivo());	
			moduloEdit.setDescripcion(modulo.getDescripcion());
			moduloEdit.setIcon(modulo.getImagen());
			moduloEdit.setNombreModulo(modulo.getNombre());
			moduloEdit.setOrden(modulo.getOrden());
			moduloEdit.setSummary(modulo.getSummary());
			moduloEdit.setTipo(modulo.getTipo());
			moduloEdit.setUrl(modulo.getUrl());
			moduloEdit.setVersion(modulo.getVersion());
			
			try{
				editEntity = mantenimientoModuloDao.moduloEdit(moduloEdit);		
			}catch(Exception e){
				System.out.println("Error DAO al tratar de editar modulo");
				response.setCodigoRespuesta(ConstantesInternasSistema.EDITAR_MODULOS_COD_IDT12);
				response.setMensajeRespuesta(ConstantesInternasSistema.EDITAR_MODULOS_MSJ_IDF11);
				return response;
			}
			
			if(editEntity.getCod_error() == Integer.valueOf(ConstantesInternasSistema.CODIGO_EXITO)){
				response.setIdTransaccion(codTransaccion);
				response.setCodigoRespuesta(String.valueOf(editEntity.getCod_error()));
				response.setMensajeRespuesta(editEntity.getMsj_error());

			}else{
				response.setCodigoRespuesta(ConstantesInternasSistema.EDITAR_MODULOS_COD_IDF11);
				response.setMensajeRespuesta(ConstantesInternasSistema.EDITAR_MODULOS_MSJ_IDF11);
			}

		}catch(Exception e){
			System.out.println("Error en el proceso de Editar Modulo");
			response.setCodigoRespuesta(ConstantesInternasSistema.EDITAR_MODULOS_COD_IDT12);
			response.setMensajeRespuesta(ConstantesInternasSistema.EDITAR_MODULOS_MSJ_IDF11);
			return response;
		}
		return response;
	}

	@Override
	public GenericResponse deleteModulo(String codTransaccion, int codModulo) {
		
		GenericEntity deleteModulo =null; 
		GenericResponse response = new GenericResponse();
		try{
				
				deleteModulo = mantenimientoModuloDao.moduloDelete(codModulo);
				
				if(deleteModulo.getCod_error() == Integer.valueOf(ConstantesInternasSistema.CODIGO_EXITO)){
					response.setIdTransaccion(codTransaccion);
					response.setCodigoRespuesta(String.valueOf(deleteModulo.getCod_error()));
					response.setMensajeRespuesta(deleteModulo.getMsj_error());
					
				}else{
					response.setCodigoRespuesta(ConstantesInternasSistema.ELIMINAR_MODULOS_COD_IDF12);
					response.setMensajeRespuesta(ConstantesInternasSistema.ELIMINAR_MODULOS_MSJ_IDF12);
				}
			
		}catch(Exception e){
			System.out.println("Error al tratar de Eliminar el Modulo " + e);
			response.setCodigoRespuesta(ConstantesInternasSistema.ELIMINAR_MODULOS_COD_IDT13);
			response.setMensajeRespuesta(ConstantesInternasSistema.ELIMINAR_MODULOS_MSJ_IDT13);
			return response;
		}
		
		return response;
	}

	@Override
	public ListaTipoModulosResponse mostrarListaTipoModulo(String codTransaccion) {
		
		ListaTipoModulosResponse response = new ListaTipoModulosResponse();
		String mensajeTransaccionMetodo = "[mostrarListaTipoModulo idTx=" + codTransaccion + "] - ";
		try{
			List<ListaTipoModulosEntity> daoListTipoModulo = null;
			response.setIdTransaccion(codTransaccion);
			try{
				daoListTipoModulo = mantenimientoModuloDao.listaTipoModulos();
			}catch(Exception e){
				System.out.println(mensajeTransaccionMetodo + "Error BD: " + e);
				response.setCodigoRespuesta(ConstantesInternasSistema.LISTAR_TIPOMODULO_COD_IDT62);
				response.setMensajeRespuesta(ConstantesInternasSistema.LISTAR_TIPOMODULO_MSJ_IDT62);
				return response;
			}
			
			if(daoListTipoModulo.size() > 0){
				List<TipoModuloBean> lista = new ArrayList<TipoModuloBean>();
				for(ListaTipoModulosEntity row : daoListTipoModulo){
					TipoModuloBean bean = new TipoModuloBean();
					bean.setCodigo(row.getId());
					bean.setTipoModulo(validaciones.validarCamposString(row.getNombre()));
					lista.add(bean);
				}
				
				response.setListaTipoModulos(lista);
				response.setCodigoRespuesta(ConstantesInternasSistema.CODIGO_EXITO);
				response.setMensajeRespuesta(ConstantesInternasSistema.MENSAJE_EXITO);
			}else{
				response.setCodigoRespuesta(ConstantesInternasSistema.LISTAR_TIPOMODULO_COD_IDF61);
				response.setMensajeRespuesta(ConstantesInternasSistema.LISTAR_TIPOMODULO_MSJ_IDF61);
			}
		}catch(Exception e){
			System.out.println(mensajeTransaccionMetodo + "Error Proceso: " + e);
			response.setCodigoRespuesta(ConstantesInternasSistema.LISTAR_TIPOMODULO_COD_IDT62);
			response.setMensajeRespuesta(ConstantesInternasSistema.LISTAR_TIPOMODULO_MSJ_IDT62);
			return response;
		}

		return response;
	}

}
